<?php
/**
 * Clase encargada de encapsular a $_SESSION para serializar y deserializar
 * objetos automáticamente.
 * 
 * @author Willy A. Kuster
 */
class Sesion {
	
	private static $instancia;
	private $prefijo = "SERIAL_";
	private $defclases = "DEFINICIONES_CLASES";
	private $recobrados = array();
	
	public static function getSesion(){
		if (!isset(self::$instancia)) {
			self::$instancia = new Sesion();
		}
		return self::$instancia;
	}
	
	private function __construct(){
		session_start();
	}
	
	public function guardarObjeto($clave, $obj) {
		$_SESSION[$this->prefijo.$clave] = serialize($obj);
		$_SESSION[$this->defclases] = Cargador::getDefiniciones();
	}
	
	public function recobrarObjeto($clave) {
		if(!isset($this->recobrados[$clave])) {
			if(isset($_SESSION[$this->prefijo.$clave]) && isset($_SESSION[$this->defclases])){
				Cargador::agregarDefiniciones($_SESSION[$this->defclases]);
				$this->recobrados[$clave] = unserialize($_SESSION[$this->prefijo.$clave]);
			} else
				return null;
		}
		return $this->recobrados[$clave];
	}
	
	public function eliminarObjeto($clave) {
		if(isset($this->recobrados[$clave]))
			unset($this->recobrados[$clave]);
		if(isset($_SESSION[$this->prefijo.$clave]))
			unset($_SESSION[$this->prefijo.$clave]);
	}
	
	public function existeObjeto($clave){
		return isset($_SESSION[$this->prefijo.$clave]);
	}
	
}
?>